<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    //21-04-05 阅览红皮书 于北京丰台 //21-06-04-夜 补充 


    /*  ECMAscript6 新增代理&反射为开发者 提供了拦截并向基本操作嵌入额外行为的能力
        具体说 1给目标对象定义一个关联的代理对象  
               2而这个代理对象可以作为抽象的目标对象来使用  
               3在对 目标对象的各种操作影响目标对象之前 可以在代理对象中对这些操作加以控制 
    */
    //目标对象既可以被直接操作(直接操作会绕开代理施予的行为) 也可以通过代理来操作 

    
    //创建空代理 
    //1最简单的空代理 即除了做一个抽象的目标对象 什么都不做 
    //2默认情况下 在代理对象上执行的所有操作都会无障碍的传播到目标对象上 因此在任何可以使用目标对象的地方 都可以使用同样的方式来使用与之关联的代理对象 

    //3代理是 使用Proxy构造函数创建的 这个函数接受俩参数 目标对象和处理程序对象 缺少一个都会抛出TypeError
    //4创建空代理 可以传入一个简单的对象字面量作为处理程序对象 使得所有的操作抵达目标对象 

    //demo案例所展示  
    //在代理对象执行的任何操作实际上都会应用德奥目标对象 注意！唯一不同的 是代码中操作的是代理对象  

    const target = {
        id:"Cdd"
    };
    const handler = { };        
    const proxy = new Proxy(target,handler);     //有俩参数 参1目标对象 参2处理程序对象 
    //id属性会访问同一个值   
    console.log(target.id);                      //Cdd
    console.log(proxy.id);                       //Cdd
    //给目标属性赋值会反射到两个对象上面 
    //因为这个赋值会转移到目标对象
    target.id = "收购腾讯";
    console.log(target.id);                      //收购腾讯
    console.log(proxy.id);                       //收购腾讯


    //反之 
    //给代理属性赋值 会反映在两个对象上 
    //因为这个赋值会转移到目标对象上  
    proxy.id = "收购阿里";
    console.log(target.id);                      //收购阿里
    console.log(proxy.id);                       //收购阿里

    //hasOwnProperty()方法在两个地方 都会应用到目标对象  
    console.log(target.hasOwnProperty("id"))     //true 
    console.log(proxy.hasOwnProperty("id"))      //true








</script>